home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / Papers / C++ Exceptions / µShell / Array Classes / (Hidden) / ListLink.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-05-25  |  1.8 KB  |  102 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        ListLink.h
  3.  
  4.     Contains:    declaration and inline implementation of ListLink class
  5.  
  6. */
  7.  
  8. #ifndef _LISTLINK_
  9. #define _LISTLINK_
  10. #pragma once
  11.  
  12. #include <Types.h>
  13.  
  14. class LinkedList;
  15.  
  16. class ListLink
  17. {
  18.     friend class LinkedListIterator;
  19.     friend class LinkedList;
  20.     friend class LinkedListOfObject;
  21.  
  22. private:
  23.       ListLink*    fPrevLink;
  24.       ListLink*    fNextLink;
  25.       LinkedList*    fList;
  26.  
  27. protected:
  28.     inline ListLink(ListLink *prev = nil, ListLink *next = nil, LinkedList* list = nil);
  29.     virtual ~ListLink();
  30.  
  31.     inline ListLink*    GetPrevLink();
  32.     inline ListLink*    GetNextLink();
  33.     inline LinkedList*    GetList();
  34.     virtual void*        GetObjectPtr();
  35.  
  36.     inline void            SetPrevLink(ListLink *prev);
  37.     inline void            SetNextLink(ListLink *next);
  38.     inline void            SetLinkedList(LinkedList *list);
  39.  
  40.     void    Link(ListLink *prev, ListLink *next, LinkedList* list);
  41.     void    Unlink(void);
  42.  
  43.     bool    IsBefore(ListLink *link);
  44.     bool    IsAfter(ListLink *link);
  45. };
  46.  
  47. ListLink::ListLink(ListLink *prev, ListLink *next, LinkedList* list)
  48. {
  49.     fPrevLink = prev;
  50.     fNextLink = next;
  51.     fList      = list;
  52. }
  53.  
  54. inline LinkedList* ListLink::GetList()
  55. {
  56.     return fList;
  57. }
  58.  
  59. inline ListLink* ListLink::GetPrevLink()
  60. {
  61.     return fPrevLink;
  62. }
  63.  
  64. inline ListLink* ListLink::GetNextLink()
  65. {
  66.     return fNextLink;
  67. }
  68.  
  69. inline void    ListLink::SetPrevLink( ListLink *prevLink )
  70. {
  71.     fPrevLink = prevLink;
  72. }
  73.  
  74. inline void    ListLink::SetNextLink( ListLink *nextLink )
  75. {
  76.     fNextLink = nextLink;
  77. }
  78.  
  79. inline void    ListLink::SetLinkedList( LinkedList *list )
  80. {
  81.     fList  = list;
  82. }
  83.  
  84. //--------------------------------------------------------------------------------
  85. // Class for a dynamicly allocated link to an object
  86. class ObjectLink : public ListLink 
  87. {
  88. private:
  89.     void*    fObject;
  90.  
  91. public:
  92.     inline ObjectLink(void* object = nil)
  93.         : fObject(object) {}
  94.     virtual ~ObjectLink();
  95.  
  96.     virtual void* GetObjectPtr();
  97. };
  98.  
  99.  
  100. #endif // _LISTLINK_
  101.  
  102.